<!DOCTYPE html>
<html lang="zh-CN">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width,initial-scale=1">
    <title>Composition -- 组合、合成物 | Ted Yuen的技术博客</title>
    <meta name="description" content="BrE /kɒmpə&#39;zɪʃ(ə)n/ ; AmE /ˌkɑmpə&#39;zɪʃən/

n. 创作, 写作, 作曲
作文, 作品
构图; 构成, 成分
混合物, 合成物

形容词: compositional

释义

1. Prefer composition over inheritance (优先使用组合模式而非继承)

在Github上 ...">
    <meta name="generator" content="VuePress 1.4.0">
    
    
    <link rel="preload" href="/assets/css/0.styles.b6e5dee4.css" as="style"><link rel="preload" href="/assets/js/app.a5c0d474.js" as="script"><link rel="preload" href="/assets/js/15.57df9f8e.js" as="script"><link rel="preload" href="/assets/js/20.08d3d7c6.js" as="script"><link rel="prefetch" href="/assets/js/10.262e0963.js"><link rel="prefetch" href="/assets/js/11.03a057c9.js"><link rel="prefetch" href="/assets/js/12.63659604.js"><link rel="prefetch" href="/assets/js/13.0549c43a.js"><link rel="prefetch" href="/assets/js/14.e794c180.js"><link rel="prefetch" href="/assets/js/16.a0d9468b.js"><link rel="prefetch" href="/assets/js/17.06d3e00b.js"><link rel="prefetch" href="/assets/js/18.0d80b21a.js"><link rel="prefetch" href="/assets/js/19.1e9da99b.js"><link rel="prefetch" href="/assets/js/21.b1aee962.js"><link rel="prefetch" href="/assets/js/22.4f410a60.js"><link rel="prefetch" href="/assets/js/23.6d06a125.js"><link rel="prefetch" href="/assets/js/24.f7a70963.js"><link rel="prefetch" href="/assets/js/25.5ee1e916.js"><link rel="prefetch" href="/assets/js/26.7bdc3bcf.js"><link rel="prefetch" href="/assets/js/27.15c6e05a.js"><link rel="prefetch" href="/assets/js/28.ae822034.js"><link rel="prefetch" href="/assets/js/29.170e7a57.js"><link rel="prefetch" href="/assets/js/3.d6f86d84.js"><link rel="prefetch" href="/assets/js/30.191f3008.js"><link rel="prefetch" href="/assets/js/31.5175acc4.js"><link rel="prefetch" href="/assets/js/32.73255ebc.js"><link rel="prefetch" href="/assets/js/33.203b8fc2.js"><link rel="prefetch" href="/assets/js/4.a2169bd0.js"><link rel="prefetch" href="/assets/js/5.894072dc.js"><link rel="prefetch" href="/assets/js/6.f66a1900.js"><link rel="prefetch" href="/assets/js/7.cbb4d687.js"><link rel="prefetch" href="/assets/js/8.d2217048.js"><link rel="prefetch" href="/assets/js/9.0d6d3c54.js"><link rel="prefetch" href="/assets/js/vuejs-paginate.643397bf.js">
    <link rel="stylesheet" href="/assets/css/0.styles.b6e5dee4.css">
  </head>
  <body>
    <div id="app" data-server-rendered="true"><div class="theme-container no-sidebar" data-v-c305a0ca><header class="navbar" data-v-c305a0ca><div class="sidebar-button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" role="img" viewBox="0 0 448 512" class="icon"><path fill="currentColor" d="M436 124H12c-6.627 0-12-5.373-12-12V80c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12z"></path></svg></div> <a href="/" class="home-link router-link-active"><!----> <span class="site-name">Ted Yuen的技术博客</span></a> <div class="links"><div class="search-box"><input aria-label="Search" autocomplete="off" spellcheck="false" value=""> <!----></div> <nav class="nav-links can-hide"><div class="nav-item"><a href="/" class="nav-link">
  博文
</a></div><div class="nav-item"><a href="/tag/" class="nav-link">
  标签云
</a></div><div class="nav-item"><div class="dropdown-wrapper"><button type="button" aria-label="专栏" class="dropdown-title"><span class="title">专栏</span> <span class="arrow right"></span></button> <ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><!----> <a href="/tag/Vocabulary/" class="nav-link">
  程序员英语词汇
</a></li></ul></div></div><div class="nav-item"><a href="https://github.com/tedyuen" target="_blank" rel="noopener noreferrer" class="nav-link external">
  GitHub
  <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg></a></div> <!----></nav></div></header> <div class="sidebar-mask" data-v-c305a0ca></div> <aside class="sidebar" data-v-c305a0ca><nav class="nav-links"><div class="nav-item"><a href="/" class="nav-link">
  博文
</a></div><div class="nav-item"><a href="/tag/" class="nav-link">
  标签云
</a></div><div class="nav-item"><div class="dropdown-wrapper"><button type="button" aria-label="专栏" class="dropdown-title"><span class="title">专栏</span> <span class="arrow right"></span></button> <ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><!----> <a href="/tag/Vocabulary/" class="nav-link">
  程序员英语词汇
</a></li></ul></div></div><div class="nav-item"><a href="https://github.com/tedyuen" target="_blank" rel="noopener noreferrer" class="nav-link external">
  GitHub
  <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg></a></div> <!----></nav>  <!----> </aside> <div data-v-c305a0ca><main class="page"> <article class="theme-default-content"><header><h1 itemprop="name headline" class="post-title">
        Composition -- 组合、合成物
      </h1> <div class="post-meta"><div itemprop="publisher author" itemtype="http://schema.org/Person" itemscope="itemscope" class="post-meta-author"><svg xmlns="http://www.w3.org/2000/svg" width="24px" height="24px" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-navigation"><polygon points="3 11 22 2 13 21 11 13 3 11"></polygon></svg> <span itemprop="name">Ted Yuen</span> <span itemprop="address">   in Shanghai</span></div> <div class="post-meta-date"><svg xmlns="http://www.w3.org/2000/svg" width="24px" height="24px" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-clock"><circle cx="12" cy="12" r="10"></circle><polyline points="12 6 12 12 16 14"></polyline></svg> <time pubdate itemprop="datePublished" datetime="2020-04-21T00:00:00.000Z">
      Tue Apr 21 2020
    </time></div> <ul itemprop="keywords" class="post-meta-tags"><li class="post-tag" data-v-6958873e><a href="/tag/Vocabulary" data-v-6958873e> Vocabulary </a></li></ul></div></header> <div class="content__default"><p><strong>BrE</strong> /kɒmpə'zɪʃ(ə)n/ ; <strong>AmE</strong> /ˌkɑmpə'zɪʃən/</p> <ol><li>n. 创作, 写作, 作曲</li> <li>作文, 作品</li> <li>构图; 构成, 成分</li> <li>混合物, 合成物</li></ol> <p>形容词: compositional</p> <h3 id="释义"><a href="#释义" class="header-anchor">#</a> 释义</h3> <h4 id="_1-prefer-composition-over-inheritance-优先使用组合模式而非继承"><a href="#_1-prefer-composition-over-inheritance-优先使用组合模式而非继承" class="header-anchor">#</a> 1. Prefer composition over inheritance (优先使用组合模式而非继承)</h4> <p>在Github上著名的<a href="https://github.com/ryanmcdermott/clean-code-javascript" target="_blank" rel="noopener noreferrer">《JavaScript 风格指南》<svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg></a>中有这么一段内容:</p> <blockquote><p>As stated famously in <a href="https://en.wikipedia.org/wiki/Design_Patterns" target="_blank" rel="noopener noreferrer">Design Patterns<svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg></a> by the Gang of Four, you should prefer <strong>composition</strong> over inheritance where you can. There are lots of good reasons to use inheritance and lots of good reasons to use <strong>composition</strong>. The main point for this maxim is that if your mind instinctively goes for inheritance, try to think if <strong>composition</strong> could model your problem better.</p></blockquote> <blockquote><p>如四人帮写的著名的<a href="https://baike.baidu.com/item/%E8%BD%AF%E4%BB%B6%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/2117635?fromtitle=%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F&amp;fromid=1212549&amp;fr=aladdin" target="_blank" rel="noopener noreferrer">设计模式<svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg></a>中所述，你应该优先使用组合模式而非继承。当然，无论是继承还是组合模式，都有许多非常棒的理由去使用他们。而这条箴言的要点是，希望当你本能地使用继承的时候，可以尝试着去思考组合模式是否能更好地满足你的需求。</p></blockquote> <p>这篇段落尝试着劝导开发人员多考虑组合的模式，比如当你描述一种关系为“有一个”而非“是一个”的时候(比如人是一种动物用继承，用户有用户信息用组合)。想要解释<strong>composition</strong>这个词，可以继续看一下文档中列举的一种情况，就能更深刻体会了:</p> <p><strong>Bad:</strong></p> <div class="language-javascript line-numbers-mode"><pre class="language-javascript"><code><span class="token keyword">class</span> <span class="token class-name">Employee</span> <span class="token punctuation">{</span>
  <span class="token function">constructor</span><span class="token punctuation">(</span><span class="token parameter">name<span class="token punctuation">,</span> email</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
    <span class="token keyword">this</span><span class="token punctuation">.</span>name <span class="token operator">=</span> name<span class="token punctuation">;</span>
    <span class="token keyword">this</span><span class="token punctuation">.</span>email <span class="token operator">=</span> email<span class="token punctuation">;</span>
  <span class="token punctuation">}</span>
  <span class="token comment">// ...</span>
<span class="token punctuation">}</span>
<span class="token comment">// Bad because Employees &quot;have&quot; tax data. EmployeeTaxData is not a type of Employee</span>
<span class="token keyword">class</span> <span class="token class-name">EmployeeTaxData</span> <span class="token keyword">extends</span> <span class="token class-name">Employee</span> <span class="token punctuation">{</span>
  <span class="token function">constructor</span><span class="token punctuation">(</span><span class="token parameter">ssn<span class="token punctuation">,</span> salary</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
    <span class="token keyword">super</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token keyword">this</span><span class="token punctuation">.</span>ssn <span class="token operator">=</span> ssn<span class="token punctuation">;</span>
    <span class="token keyword">this</span><span class="token punctuation">.</span>salary <span class="token operator">=</span> salary<span class="token punctuation">;</span>
  <span class="token punctuation">}</span>
  <span class="token comment">// ...</span>
<span class="token punctuation">}</span>
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br><span class="line-number">16</span><br></div></div><p><strong>Good:</strong></p> <div class="language-javascript line-numbers-mode"><pre class="language-javascript"><code><span class="token keyword">class</span> <span class="token class-name">Employee</span> <span class="token punctuation">{</span>
  <span class="token function">constructor</span><span class="token punctuation">(</span><span class="token parameter">name<span class="token punctuation">,</span> email</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
    <span class="token keyword">this</span><span class="token punctuation">.</span>name <span class="token operator">=</span> name<span class="token punctuation">;</span>
    <span class="token keyword">this</span><span class="token punctuation">.</span>email <span class="token operator">=</span> email<span class="token punctuation">;</span>
  <span class="token punctuation">}</span>
  <span class="token function">setTaxData</span><span class="token punctuation">(</span><span class="token parameter">ssn<span class="token punctuation">,</span> salary</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
    <span class="token keyword">this</span><span class="token punctuation">.</span>taxData <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">EmployeeTaxData</span><span class="token punctuation">(</span>ssn<span class="token punctuation">,</span> salary<span class="token punctuation">)</span><span class="token punctuation">;</span>
  <span class="token punctuation">}</span>
  <span class="token comment">// ...</span>
<span class="token punctuation">}</span>

<span class="token keyword">class</span> <span class="token class-name">EmployeeTaxData</span> <span class="token punctuation">{</span>
  <span class="token function">constructor</span><span class="token punctuation">(</span><span class="token parameter">ssn<span class="token punctuation">,</span> salary</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
    <span class="token keyword">this</span><span class="token punctuation">.</span>ssn <span class="token operator">=</span> ssn<span class="token punctuation">;</span>
    <span class="token keyword">this</span><span class="token punctuation">.</span>salary <span class="token operator">=</span> salary<span class="token punctuation">;</span>
  <span class="token punctuation">}</span>
  <span class="token comment">// ...</span>
<span class="token punctuation">}</span>
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br><span class="line-number">16</span><br><span class="line-number">17</span><br><span class="line-number">18</span><br></div></div><p>题外话，还记得以前一道关于面向对象的经典面试题吗: Composition(组合)与Aggregation(聚合)的区别。</p> <h4 id="_2-composition-api"><a href="#_2-composition-api" class="header-anchor">#</a> 2. Composition API</h4> <p>4月17日，Vue 3.0 beta版千呼万唤始出来。其中最值得细细嚼的莫过于<a href="https://vue-composition-api-rfc.netlify.app/" target="_blank" rel="noopener noreferrer">Composition API<svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg></a>了。Vue核心团队将组件Composition API描述为“一套附加的、基于函数的api，允许灵活地组合组件逻辑”。如果我们需要深刻地理解此处为什么使用 <strong>composition</strong> 这个单词，先要搞清楚他们想要组合什么，让我们先来看一段官方例子:</p> <div class="language-html line-numbers-mode"><pre class="language-html"><code><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>template</span><span class="token punctuation">&gt;</span></span>
  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>button</span> <span class="token attr-name">@click</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>increment<span class="token punctuation">&quot;</span></span><span class="token punctuation">&gt;</span></span>
    Count is: {{ state.count }}, double is: {{ state.double }}
  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>button</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>template</span><span class="token punctuation">&gt;</span></span>

<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>script</span><span class="token punctuation">&gt;</span></span><span class="token script"><span class="token language-javascript">
<span class="token keyword">import</span> <span class="token punctuation">{</span> reactive<span class="token punctuation">,</span> computed <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">'vue'</span>

<span class="token keyword">export</span> <span class="token keyword">default</span> <span class="token punctuation">{</span>
  <span class="token function">setup</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
    <span class="token keyword">const</span> state <span class="token operator">=</span> <span class="token function">reactive</span><span class="token punctuation">(</span><span class="token punctuation">{</span>
      count<span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>
      double<span class="token operator">:</span> <span class="token function">computed</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=&gt;</span> state<span class="token punctuation">.</span>count <span class="token operator">*</span> <span class="token number">2</span><span class="token punctuation">)</span>
    <span class="token punctuation">}</span><span class="token punctuation">)</span>

    <span class="token keyword">function</span> <span class="token function">increment</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
      state<span class="token punctuation">.</span>count<span class="token operator">++</span>
    <span class="token punctuation">}</span>

    <span class="token keyword">return</span> <span class="token punctuation">{</span>
      state<span class="token punctuation">,</span>
      increment
    <span class="token punctuation">}</span>
  <span class="token punctuation">}</span>
<span class="token punctuation">}</span>
</span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>script</span><span class="token punctuation">&gt;</span></span>
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br><span class="line-number">16</span><br><span class="line-number">17</span><br><span class="line-number">18</span><br><span class="line-number">19</span><br><span class="line-number">20</span><br><span class="line-number">21</span><br><span class="line-number">22</span><br><span class="line-number">23</span><br><span class="line-number">24</span><br><span class="line-number">25</span><br><span class="line-number">26</span><br><span class="line-number">27</span><br></div></div><p>使用过Vue2.0中Options API的同学应该很快就能看出，他们这次是把一个功能逻辑中的响应式数据、计算、方法、生命周期钩子等组合到一个函数中了。如果一个复杂组件有多个逻辑，可以创建多个此类的函数来调用。这样做的好处有很多(相对于mixins、HOC来说):</p> <ol><li>有效地编写可重用的代码，</li> <li>可读性强。</li> <li>更好地使用Typescript。</li></ol> <p>暂时没法升级版本的小伙伴也不用担心，Vue2可以使用官方提供的<a href="https://github.com/vuejs/composition-api" target="_blank" rel="noopener noreferrer">插件<svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg></a>。</p> <h3 id="最后"><a href="#最后" class="header-anchor">#</a> 最后</h3> <p>我们上学的时候，这个单词最多用的意思是作文、作品。单词的中文解释也是根据各种语境提炼出来的。试想一下，把作文、作品理解成组合自己脑中积累，思考而出的，是不是就能记住这个单词了。当我们想表达这种组合出的一个东西，就可以用它了。</p></div> <footer class="page-edit"><!----> <!----></footer> <!----> <div class="vocabulary"><div>关注公众号【程序员英语词汇】获取最新内容</div> <img src="/images/wechat.jpg" alt="程序员英语词汇"></div></article> </main></div> <footer data-v-c305a0ca>Copyright © 2020 Ted Yuen</footer></div><div class="global-ui"><!----></div></div>
    <script src="/assets/js/app.a5c0d474.js" defer></script><script src="/assets/js/15.57df9f8e.js" defer></script><script src="/assets/js/20.08d3d7c6.js" defer></script>
  </body>
</html>
